package biblio;
// @author Cindy


public class Monitor {
    
    private Estudiante Estudiante;
    private Recep Recepcionista;   
    static int semaforo;//para usar los metodos sincronizados se utiliza objetos o
    //valiables estatica
    
     public Monitor() {
        this(5);// se inicializa el semaforo en 5
    }
     public Monitor(int i) {
        semaforo = i; // aqui al semaforo un valor numerico
    }//termina constructor     
           

     
    public Monitor(Estudiante Estudiante){
        this.Estudiante=Estudiante;//constructor para llamar al hilo Estudiante
    }//termina constructor     
    public Monitor(Recep Recepcionist){
        this.Recepcionista=Recepcionist;//constructor para llamar al hilo Recepcionista
    }//termina constructor     
     
       public synchronized void recepcion() {    
           
            try {
                Recepcionista.sleep((1000*Datos.tiempo_habitacion));
                //se pone a dormir hilo el tiempo que dure en la habitación el estudiante
                if(semaforo<=5&&semaforo>0){
                    
                    Recepcionista.wait();
                    //this.wait();
                }//termina if(semaforo<=5&&semaforo>0)
                else {
                    System.out.println("Se ocupo una sala nueva");	
                    System.out.println("\nss "+semaforo);
                    semaforo++;
		    Recepcionista.notify();
                    if(Estudiante.lleno==4){
                       for(;;){
                           int j;
                           for (j=0; j<=5-1;j++){
                                System.out.print("["+Datos.Habitaciones[j]+"] ");
                           }//termina for (j=0; j<=(Datos.Habitaciones.length)-1;j++)
                           if(j<=5){
                                break;
                           }//termina if(j<=5)
                       }//termina for(;;)
                    }//terminar if(Estudiante.lleno==4)
                }//terminar else
            }//termina try
            catch (Exception e) { 
            }//termina catch (Exception e) 
               
    }
 
    public synchronized void estud() {
            try {
                System.out.println( "Tiempo: " + Biblio.to + " ms. "  );
                if(semaforo<=5&&semaforo>0){
                    Estudiante.sleep(((1000*Datos.tiempo_estudiante)));
                    //se pone a dormir el hilo el tiempo que existe entre estudiantes
                   System.out.println("\ns1 "+semaforo);//escribe el semaforo dentro de este metodo
                   semaforo--;
                   System.out.println("Se ocupo una sala nueva");	
	           Estudiante.notify();//Aqui le da la notificación al hilo que continue con la 
                   //operacion
                }//termina if(semaforo<=5&&semaforo>0)
                else {                       
                    Estudiante.wait();
                }//termina else
            }// termina try 
            catch (Exception e) { 
            }//termina catch
    }
        

}